package DAO;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import Hibernate.HibernateUtil;
import Negocio.Empleado;
import Negocio.Proveedor;

public class HibernateEmpleadoDAO 
{
	private static HibernateEmpleadoDAO instancia = null;
	private static SessionFactory sf = null;
	
	
	public static HibernateEmpleadoDAO getInstancia(){
		if(instancia == null){
			instancia = new HibernateEmpleadoDAO();
			sf = HibernateUtil.getSessionFactory();
		}
		return instancia;
	}
	
	public Empleado getEmpleado(int dni){
        try {
        	Session session=sf.openSession();
            session.beginTransaction();
            Empleado empleado = (Empleado)session.get(Empleado.class, dni);
            session.getTransaction().commit();
            session.close();
            return empleado;
        } catch (Exception e){
            System.out.println(e);
            System.out.println("Error al cargar el Empleado");
        }
        return null;
	}

		public void grabarEmpleado(Empleado empleado){
		try{
		Session session = sf.openSession();
		session.beginTransaction();
		session.saveOrUpdate(empleado);
		session.flush();
		session.getTransaction().commit();
		session.close();
		}catch(Exception e){
			System.out.println(e);
			System.out.println("Error al grabar un Empleado");
		}
	}

		public Empleado buscarEmpleadoUsuario(String usuario) 
		{
		      try 
		      {
		        	Session session=sf.openSession();
		            session.beginTransaction();
		            Query q = session.createQuery("select emp from Empleado emp left join fetch emp.usuario where emp.usuario = ?").setString(0, usuario);
		            Empleado empleado = (Empleado) q.uniqueResult();
		            session.getTransaction().commit();
		            session.close();
		            return empleado;
		        } catch (Exception e){
		            System.out.println(e);
		            System.out.println("Error al buscar el Empleado del Usuario");
		        }
		        return null;
		}

		public void updateEmpleado(Empleado empleado) 
		{
			try{
				Session session = sf.openSession();
				session.beginTransaction();
				session.update(empleado);
				session.flush();
				session.getTransaction().commit();
				session.close();
				}catch (Exception e){
					System.out.println(e);
		            System.out.println("Error al actualizar una Empleado");
				}
		}

}
